#include <stdio.h>
#include <stdlib.h>
#include "tree.h"

// 定义节点结构
struct RBNode {
    int value;
    RB_ENTRY(RBNode) entry;
};

// 定义红黑树结构
RB_HEAD(RBTree, RBNode);

// 比较函数
int RBNodeCompare(struct RBNode *a, struct RBNode *b) {
    return (a->value - b->value);
}

// 生成红黑树操作函数
RB_PROTOTYPE(RBTree, RBNode, entry, RBNodeCompare)
RB_GENERATE(RBTree, RBNode, entry, RBNodeCompare)

int rb_test() {
    // 初始化红黑树
    struct RBTree tree = RB_INITIALIZER(&tree);
    RB_INIT(&tree);

    // 插入节点
    int values = 1000;
    for (int i = 0; i < values; i++) {
        struct RBNode *node = malloc(sizeof(struct RBNode));
        node->value = rand() % 1000;
        RB_INSERT(RBTree, &tree, node);
    }

    // // 查找节点
    // struct RBNode findNode;
    // findNode.value = 15;
    // struct RBNode *result = RB_FIND(RBTree, &tree, &findNode);
    // if (result) {
    //     printf("Found node with value: %d\n", result->value);
    // } else {
    //     printf("Node with value %d not found\n", findNode.value);
    // }

    // 遍历节点
    struct RBNode *iter;
    printf("Tree nodes in order: ");
    RB_FOREACH(iter, RBTree, &tree) {
        printf("%d ", iter->value);
    }
    printf("\n");

    // // 删除节点
    // findNode.value = 20;
    // result = RB_FIND(RBTree, &tree, &findNode);
    // if (result) {
    //     RB_REMOVE(RBTree, &tree, result);
    //     free(result);
    //     printf("Node with value %d removed\n", findNode.value);
    // }

    // // 再次遍历节点
    // printf("Tree nodes after deletion: ");
    // RB_FOREACH(iter, RBTree, &tree) {
    //     printf("%d ", iter->value);
    // }
    // printf("\n");

    // 清理所有节点
    RB_FOREACH(iter, RBTree, &tree) {
        free(iter);
    }

    return 0;
}